package com.cxh.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.common.dao.BaseDao;
import com.common.entity.A_goodsType;
import com.cxh.dao.A_goodsTypeDao;

public class A_goodsTypeDaoImpl extends BaseDao<A_goodsType> implements A_goodsTypeDao {

	@Override
	/**
	 * ע�⣺ʹ��ʱmp��key����Ϊ���������
	 * ����Ϊ������Բ����������
	 * Integer goodsType_id, Integer good_level, Integer super_type_id, String name
	 */
	public List<A_goodsType> findByCondition(Map<String, Object> mp, boolean isTree) {
		List<Object> pList = new ArrayList<Object>();
		StringBuffer sb = new StringBuffer(" select t.* ");
		if(isTree)
			sb.append(",level ");
		sb.append("from a_goodsType t where 1=1 ");	
		if(!(mp==null||mp.size()<1))
			for(Entry<String, Object> et:mp.entrySet()){
				sb.append("and "+et.getKey()+" = ? ");
				pList.add(et.getValue());
			}
		if(isTree)
			sb.append("start with t.super_type_id is null connect by prior t.goodsType_id = super_type_id");
		return findBySql(sb.toString(), pList.toArray());
	}

	@Override
	public A_goodsType findById(int id) {
		String sql = " select * from a_goodsType where goodsType_id = ? ";
		Object[] obj = {id};
		List<A_goodsType> lg = findBySql(sql, obj);
		return (lg!=null&&lg.size()>0)?lg.get(0):null;
	}

	@Override
	/**
	 * ע�⣺ʹ��ʱmp��key����Ϊ���������
	 * ����Ϊ������Բ����������
	 * Integer goodsType_id, Integer good_level, Integer super_type_id, String name
	 */
	public int updateA_goodsType(Map<String, Object> mp) {
		String sql = "update A_goodsType set good_level=?, super_type_id=?, name=? where goodsType_id=?";
		Object[] objs = {mp.get("good_level"),mp.get("super_type_id"),mp.get("name"),mp.get("goodsType_id")};
		return executeUpdate(sql, objs);
	}

	@Override
	public int deleteA_goodsType(int id) {
		String sql = "delete from A_goodsType where goodsType_id=?";
		Object[] objs = {id};
		return executeUpdate(sql, objs);
	}

	@Override
	/**
	 * ע�⣺ʹ��ʱmp��key����Ϊ���������
	 * ����Ϊ������Բ����������
	 * Integer goodsType_id, Integer good_level, Integer super_type_id, String name
	 */
	public int addA_goodsType(Map<String, Object> mp) {
		String sql = "insert into A_goodsType values(SEQ_A_GOODSTYPE.nextval,?,?,?)";
		Object[] objs = {mp.get("good_level"),mp.get("super_type_id"),mp.get("name")};
		return executeUpdate(sql, objs);
	}

	@Override
	public A_goodsType getEntity(ResultSet rs) {
		A_goodsType gt = new A_goodsType();
		try {
			if(hasColumn(rs,"level"))
				gt.setGood_level(rs.getInt("level"));
			else
				gt.setGood_level(rs.getInt("good_level"));
			gt.setGoodsType_id(rs.getInt("goodsType_id"));
			gt.setName(rs.getString("name"));
			gt.setSuper_type_id(rs.getInt("super_type_id"));
			return gt;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	public boolean hasColumn(ResultSet rs,String name){
		try {
			if(rs.findColumn(name)>0)
				return true;
		} catch (SQLException e) {
			return false;
		}
		return false;
	}
}
